/*
 * Class: PaymentMethodDAO
 * Created by: Mary Joy Pascual
 * Date Created: 06/25/2014
 * Company: Netsuite
*/
package com.netsuite.dao;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.rmi.RemoteException;

import javax.xml.rpc.ServiceException;
import javax.xml.soap.SOAPException;

import com.netsuite.constants.Constants;
import com.netsuite.helper.ErrorHelper;
import com.netsuite.logger.LoggerImp;
import com.netsuite.webservices.lists.accounting_2014_1.PaymentMethod;
import com.netsuite.webservices.platform.common_2014_1.PaymentMethodSearchBasic;
import com.netsuite.webservices.platform.core_2014_1.Record;
import com.netsuite.webservices.platform.core_2014_1.SearchResult;
import com.netsuite.webservices.platform.core_2014_1.SearchStringField;
import com.netsuite.webservices.platform.core_2014_1.types.SearchStringFieldOperator;
import com.netsuite.webservices.platform.faults_2014_1.ExceededRecordCountFault;
import com.netsuite.webservices.platform.faults_2014_1.ExceededRequestLimitFault;
import com.netsuite.webservices.platform.faults_2014_1.ExceededRequestSizeFault;
import com.netsuite.webservices.platform.faults_2014_1.ExceededUsageLimitFault;
import com.netsuite.webservices.platform.faults_2014_1.InvalidCredentialsFault;
import com.netsuite.webservices.platform.faults_2014_1.InvalidSessionFault;
import com.netsuite.webservices.platform_2014_1.NetSuitePortType;


public class PaymentMethodDAO {

private static String CLASS_NAME = PaymentMethodDAO.class.getName();
	
	private NetSuitePortType _service = null;

	public PaymentMethodDAO() throws ErrorHelper {
		try {
			MainDAO mainDAO = new MainDAO();
			_service = mainDAO.get_service();
		} catch (FileNotFoundException e) {
			LoggerImp.errorLog(CLASS_NAME, Constants.ERROR_FNF+ e.getMessage());
			throw new ErrorHelper(CLASS_NAME,Constants.ERROR_FNF+ e.getMessage());
		} catch (ServiceException e) {
			LoggerImp.errorLog(CLASS_NAME, Constants.ERROR_SE+ e.getMessage());
			throw new ErrorHelper(CLASS_NAME,Constants.ERROR_SE+ e.getMessage());
		} catch (IOException e) {
			LoggerImp.errorLog(CLASS_NAME,Constants.ERROR_IO+ e.getMessage());
			throw new ErrorHelper(CLASS_NAME,Constants.ERROR_IO+ e.getMessage());
		} catch (SOAPException e) {
			LoggerImp.errorLog(CLASS_NAME,Constants.ERROR_SOAP+ e.getMessage());
			throw new ErrorHelper(CLASS_NAME,Constants.ERROR_SOAP+ e.getMessage());
		}

	}
	
	public String getPaymentMethodInternalId (String paymentType) throws ErrorHelper {
		
		LoggerImp.startLog(CLASS_NAME, "getPaymentMethodInternalId()");
		
		String id = "";
		PaymentMethodSearchBasic refSearch = new PaymentMethodSearchBasic();
		refSearch.setName(new SearchStringField());
		refSearch.getName().setSearchValue(paymentType);
		refSearch.getName().setOperator(SearchStringFieldOperator.contains);
		
		SearchResult searchResult;
		try {
			searchResult = _service.search(refSearch);
			if(searchResult.getStatus().isIsSuccess()){
				for(Record rec : searchResult.getRecordList().getRecord()){
					PaymentMethod payment = (PaymentMethod) rec;
					id = payment.getInternalId();
				}
			}
		} catch (ExceededRequestSizeFault e) {
			LoggerImp.errorLog(CLASS_NAME, Constants.ERROR_SIZ+ e.getMessage());
			throw new ErrorHelper(CLASS_NAME,Constants.ERROR_SIZ+ e.getMessage());
		} catch (InvalidCredentialsFault e) {
			LoggerImp.errorLog(CLASS_NAME, Constants.ERROR_INV+ e.getMessage());
			throw new ErrorHelper(CLASS_NAME,Constants.ERROR_INV+ e.getMessage());
		} catch (ExceededUsageLimitFault e) {
			LoggerImp.errorLog(CLASS_NAME, Constants.ERROR_USE+ e.getMessage());
			throw new ErrorHelper(CLASS_NAME,Constants.ERROR_USE+ e.getMessage());
		} catch (ExceededRequestLimitFault e) {
			LoggerImp.errorLog(CLASS_NAME, Constants.ERROR_REQ+ e.getMessage());
			throw new ErrorHelper(CLASS_NAME,Constants.ERROR_REQ+ e.getMessage());
		} catch (ExceededRecordCountFault e) {
			LoggerImp.errorLog(CLASS_NAME, Constants.ERROR_MAX+ e.getMessage());
			throw new ErrorHelper(CLASS_NAME,Constants.ERROR_MAX+ e.getMessage());
		} catch (InvalidSessionFault e) {
			LoggerImp.errorLog(CLASS_NAME, Constants.ERROR_SES+ e.getMessage());
			throw new ErrorHelper(CLASS_NAME,Constants.ERROR_SES+ e.getMessage());
		} catch (RemoteException e) {
			LoggerImp.errorLog(CLASS_NAME, Constants.ERROR_REM+ e.getMessage());
			throw new ErrorHelper(CLASS_NAME,Constants.ERROR_SES+ e.getMessage());
		}
		
		LoggerImp.endLog(CLASS_NAME, "getPaymentMethodInternalId()");
		
		return id;
	}
	
}
